360 degree video is created by taking video streams from several cameras arranged around a single point and stitching the video streams together to create a single continuous video image. Modern encoders break the continuous video image in to multiple video streams of frames. To watch 360 degree video over a network, a server sends a client these multiple streams of frames. The client decodes and reassembles the streams into continuous images that are presented on a display.
A system may send a single request for frames, download the requested frames and then assemble them for display. This combination of actions is sometimes called a fetch action. Generally to reliably stream video without interruption a client must also pre-fetch video which means the system must download frames and process them before prior downloaded frames have been displayed. In this way the system builds a buffer of processed frames between the processed frames that are being displayed and subsequent frames that need to be downloaded and processed.
Buffering can be very costly on system resources especially when processing and storing high resolution video. To save bandwidth and reduce the amount of buffering required a client may request only a high resolution video stream frames that are within the field of view of the client also known as the viewport. In this case the client receives low resolution video streams for all but the current view of the client. A problem with this system is that a client is often able to move the field of view faster than a high quality stream can be requested, delivered and buffered. Thus, there is a need in the art, for a system that allows the client to predict where the field of view might be pointed in a 360 degree video stream and fetch the corresponding high resolution video stream before the field of view has moved.